﻿using System;
//T?转换成System.Nullable<T>。而Nullable<T>是一个轻量的不变结构，它只有两个域，分别是Value和HasValue。System.Nullable<T>实质上是很简单的：
/*
public struct Nullable<T> where T : struct
{
    public T Value { get; }
    public bool HasValue { get; }
    public T GetValueOrDefault();
    public T GetValueOrDefault(T defaultValue);
    //...
}
*/

namespace _114_可空类型_Nullable_T_结构体
{
    class Program
    {
        static void Main(string[] args)
        {
            /*
            int? i = null;
            Console.WriteLine(i == null); // 结果为真
            */
            //转换成：
            Nullable<int> i = new Nullable<int>();
            Console.WriteLine(!i.HasValue); // 结果为真
            //当HasValue为假时尝试获取Value，程序会抛出一个InvalidOperationException异常。当HasValue为真，GetValueOrDefault()会返回Value，否则返回new T()或者一个特定的自定义默认值。
            // T?的默认值时null。
            Console.ReadKey();
        }
    }
}
